package com.mashibing.dp.singleton;

/**
 * lazy loading * 也称懒汉式- 同步代码块：线程不安全，和第三种的缺点相似
 */
public class Mgr05 {
    private static Mgr05 INSTANCE;

    private Mgr05() {
    }

    public static Mgr05 getInstance() {
        if (INSTANCE == null) {// 这个判断和下面的代码块不是一起的，所以多线程下还是有问题
            //妄图通过减小同步代码块的方式提高效率，然后不可行：还是出现方案三的问题
            synchronized (Mgr05.class) {
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                INSTANCE = new Mgr05();
            }
        }
        return INSTANCE;
    }

    public void m() {
        System.out.println("m");
    }

    public static void main(String[] args) {
        for(int i=0; i<100; i++) {
            new Thread(()->{
                System.out.println(Mgr05.getInstance().hashCode());
            }).start();
        }
    }
}
